package com.shujia.day17;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Code05GetFunction {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, InvocationTargetException, InstantiationException, IllegalAccessException {

        Class<?> aClass = Class.forName("com.shujia.day17.Student");

        /*
            需求：
                获取成员方法，并对成员方法进行调用

            public Method getMethod(String name, Class<?>... parameterTypes)
                从类对象中获取成员方法，其中name表示方法名
                parameterTypes表示成员方法的参数 如果获取的方法没有参数，那么该参数不需要填写

            invoke  public Object invoke(Object obj, Object... args)
                表示对方法进行做调用
                obj 表示要操控的对象

         */

        Method printInfo = aClass.getMethod("printInfo");

        Field name = aClass.getField("name");
        Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
        declaredConstructor.setAccessible(true);
        Object o = declaredConstructor.newInstance();
        System.out.println(o);
        name.set(o,"张从文");

        //
        printInfo.invoke(o);

        Method learn = aClass.getDeclaredMethod("learn", boolean.class);

        learn.setAccessible(true); // 方法私有 需要设置权限

        learn.invoke(o,true);



    }
}
